package com.zyx.test1;

import org.junit.Test;

import java.util.ArrayList;
import java.util.List;
import java.util.function.Consumer;
import java.util.function.Function;
import java.util.function.Supplier;

/**
 * java内置四个函数式接口
 *
 * Consumer消费式接口  void accept(T t)
 *
 * Supplier供给型接口  T get()
 *
 * Function <T,R> 函数式接口  R apply(T t)
 *
 * Predicate<T> 断言型接口  boolean test(T t)
 *
 *
 */
public class TestLambda {

    @Test
    public void test1(){
      happy(100.00, (m) -> System.out.println(m));
    }

    // 消费函数式接口
    public void happy(Double d, Consumer<Double> con) {
        con.accept(d);
    }

    // 供给型函数式接口
    // 产生指定个数的整数，并放入集合
    @Test
    public void test2 () {
       getNumList(10, () -> (int)(Math.round(10)));

    }
    public List<Integer> getNumList(Integer num, Supplier<Integer> sup) {
        List<Integer> numlist = new ArrayList<>();
        for(int i = 0;i < num;i++) {
            numlist.add(sup.get());
        }
        return numlist;
    }

    // 函数型接口
    // Function(T,R)
    // 传进一个字符串，返回字符串的长度
    @Test
    public void test3 () {
     Integer i =  getStringLength("232323232", (str) -> {
            System.out.println(str.length());
            return str.length();
        });

        System.out.println(i);
    }

    public Integer getStringLength(String str , Function<String, Integer> function ) {
       return function.apply(str);
    }

}
